package org.chen.common.task;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 定时任务实体 - 支持动态日期计算
 */
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class ScheduledTask {
    private String id;
    private String name;

    // 基础搜索条件（不包含具体日期）
    private String departure;           // 出发城市代码
    private String destination;         // 目的地城市代码
    private String tripType;            // 行程类型: oneway/roundtrip
    private int adults;                 // 成人数量
    private int children;               // 儿童数量
    private int infants;                // 婴儿数量
    private String cabinClass;          // 舱位等级

    // 动态日期配置
    private LocalDate baseDate;         // 基准开始日期（用户设置的起始日期）
    private int crawlCycle;             // 爬取周期（天数）
    private int executionCount;         // 每次执行的次数（如执行2次）
    private boolean isRoundTrip;        // 是否往返（往返需要计算返程日期）
    private int roundTripDays;          // 往返行程天数（往返时使用）

    // 调度配置
    private String cronExpression;      // Cron表达式
    private String exportPath;          // 导出路径

    // 邮件通知
    private boolean emailNotification;  // 是否启用邮件通知
    private List<String> emailRecipients; // 邮件接收者

    // 任务状态
    private String status;              // ACTIVE, PAUSED, STOPPED
    private LocalDateTime createdAt;    // 创建时间
    private LocalDateTime lastRunAt;    // 最后运行时间
    private LocalDateTime nextRunAt;    // 下次运行时间
    private String lastRunResult;       // SUCCESS, FAILED
    private String lastErrorMessage;    // 最后错误信息
    private int totalRunCount;          // 总运行次数
    private boolean exportLowestPriceOnly; // 是否只导出最低价格

    // 运行统计
    private int successCount;           // 成功次数
    private int failedCount;            // 失败次数
    private String lastExecutionSummary; // 最后执行摘要
}